package tool

/*******************************************************************************
Copyright:cloud
Author:cloudapex@126.com
Version:1.0
Date:2020-06-12
Description: 工具模块
*******************************************************************************/
import (
	"context"
	"permis/api/api"
	"permis/api/cache"
	"permis/model"

	gpc "gitee.com/cloudapex/protos/comm/pb"
	gpb "gitee.com/cloudapex/protos/permis/pb"

	prds "gitee.com/cloudapex/permit/cache"
	"gitee.com/cloudapex/ulern/util"
)

func GServer() *Server { return (&Server{}).Init() }

type Server struct {
	util.LogMe

	gpb.UnimplementedToolServer
}

func (this *Server) Init() *Server {
	this.LogMe.Init("GRPC", func() string { return "tool" })
	return this
}

/*
 * 描述: 用户的角色缓存数据
 * 方法: Simple
 *********************************************************************/
func (this *Server) CacheRole(ctx context.Context, req *gpb.CacheRoleReq) (*gpb.CacheRoleRes, error) {
	if req.UId == 0 && req.Name == "" {
		return nil, api.Error(api.ECode_ParamsErr, "请至少使用一个查询条件")
	}

	usr := model.User{Id: req.UId, Name: req.Name}
	if has, err := usr.Load(); !has || err != nil {
		return nil, api.FoundError("目标不存在", err)
	}

	role := prds.SUserRole{Id: usr.Id}
	if err := role.Load(); err != nil {
		return nil, api.RDBError("角色缓存不存在", err)
	}

	res := gpb.CacheRoleRes{}
	if err := util.Convert(&res, role); err != nil {
		return nil, api.ConvertError("", err)
	}
	return &res, nil
}

/*
 * 描述: 路由的缓存数据
 * 方法: Simple
 *********************************************************************/
func (this *Server) CacheRoute(ctx context.Context, req *gpb.CacheRouteReq) (*gpb.CacheRouteRes, error) {
	route := prds.HRouteRole{CoId: req.CoId, Route: req.Route}
	if err := route.Load(); err != nil {
		return nil, api.RDBError("此路由缓存不存在", err)
	}

	res := gpb.CacheRouteRes{}
	if err := util.Convert(&res, route); err != nil {
		return nil, api.ConvertError("", err)
	}
	return &res, nil
}

/*
 * 描述: 重置路由缓存数据
 * 方法: Simple
 *********************************************************************/
func (this *Server) CacheReset(ctx context.Context, req *gpc.IdRequest) (*gpc.UnResponse, error) {
	if err := cache.ResetRouteRoles(req.Id); err != nil {
		return nil, api.RDBError("缓存重置失败", err)
	}
	return &gpc.UnResponse{}, nil
}
